import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
from datetime import datetime

import pymysql

# 准备数据（日期和价格）
dates = []
prices = []

# 1. 连接数据库
connection = pymysql.connect(
    host="117.72.210.65",  # 数据库服务器地址
    user="root",  # 用户名
    password="zheng@123456",  # 密码
    database="gp",  # 数据库名
    charset="utf8mb4",  # 字符集
    cursorclass=pymysql.cursors.DictCursor  # 返回字典格式数据
)

try:
    # 2. 创建游标
    with connection.cursor() as cursor:
        # 3. 执行 SQL 查询
        sql = "select  rise_proportion as riseNum, day from gp_rise_proportion order by day desc"
        cursor.execute(sql)  # 参数化查询，防止 SQL 注入

        # 4. 获取查询结果
        results = cursor.fetchall()  # 获取所有数据
        # results = cursor.fetchone()  # 获取单条数据

        # 5. 遍历结果
        for row in results:
            #print(row['riseNum'])
            #print(row['day'])
            prices.append(row['riseNum'])
            dates.append(row['day'])

finally:
    # 6. 关闭连接
    connection.close()



# 2. 将日期字符串转换为 datetime 对象（便于 Matplotlib 处理）
date_objects = [datetime.strptime(date, "%Y-%m-%d") for date in dates]

# 3. 创建 DataFrame（可选，方便数据处理）
df = pd.DataFrame({"Date": date_objects, "Price": prices})

# 4. 绘制折线图
plt.figure(figsize=(10, 5))  # 设置图表大小
plt.plot(df["Date"], df["Price"],
         marker="o",          # 显示数据点
         linestyle="-",       # 实线连接
         color="b",           # 蓝色
         label="商品价格")     # 图例标签

# 5. 设置图表标题和坐标轴标签
plt.title("情绪图）", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("百分比", fontsize=12)

# 6. 优化横坐标日期显示
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%m-%d"))  # 显示为 "月-日"
plt.gca().xaxis.set_major_locator(mdates.DayLocator())              # 每天显示一个刻度
plt.gcf().autofmt_xdate()  # 自动旋转日期标签，避免重叠

# 7. 添加网格线和图例
plt.grid(True, linestyle="--", alpha=0.6)
plt.legend()

# 8. 显示图表
plt.tight_layout()  # 自动调整布局
plt.show()